import http from 'wx-https'

// 进行基地址的封装
http.baseURL = 'https://live-api.itheima.net'
// 请求拦截器添加属性token
http.intercept.request = (config) => {
  // console.log(config);
  const defaultConfig = {
    Authorization: getApp().token,
    // 其他同事添加自己的配置，就可以在这里加，不用去给 config 通用的对象添加
    // 在我写代码的时候，有时会考虑一些代码的扩展性，为后面项目的迭代升级做准备
  }
  config.header = Object.assign({}, defaultConfig, config.header)
  return config
}
// 响应拦截器 他的写法 一般是看官网网站
http.intercept.response = async ({
  data,
  statusCode,
  config
}) => {
  if (statusCode == 401) {
    console.log(11, config);
    // 若refreshToken也失效了呢?那我们就强行让他跳转到登录页面重新登陆一次
    // includes仅能用来判断元素是否存在。
    if (config.url.includes('refreshToken')) {
      // getCurrentPages() 获取当前页面栈。数组中第一个元素为首页，最后一个元素为当前页面。
      const pages = getCurrentPages()
      // 拿到当前页 然后 当做参数给登录页面
      const currentPage = pages[pages.length - 1]
      return wx.redirectTo({
        // 传值给登录页面 然后登录页面那边通过onLoad钩子里面的option接收
        url: `/pages/login/index?redirectUrl=/${currentPage.route}`,
      })
    }
    // 如果token失效了 那我们可以发送刷新token的这个请求refreshToken 进行刷新我们的token
    const app = getApp()
    const res = await http({
      url: '/refreshToken',
      method: 'post',
      header: {
        Authorization: app.refreshToken
      }
    })
    console.log('401刷新token请求成功', res.data.token);
    // 把存到本地存储中的token 进行封装 因为在别的页面也需要使用
    getApp().settoken(res.data.token, res.data.refreshToken)
  }

  return data
}
// 挂载到全局空间wx上
// 前面最好加号$，用以和原生的api做区分
wx.$http = http
// 导出模块
export default http